import java.util.Arrays;

public class ArrayList implements List{

    public int[] Array;
    public  int UsedSize;
    public static final int Number = 5;
    Boolean flg = true;
    public ArrayList(){
        this.Array = new int[Number];
    }

    @Override
    public void add(int data) {
        if (IsFull()){
            grow();
        }
        Array[UsedSize] = data;
        UsedSize++;
    }//在顺序表有效数字末尾增添数字
    private boolean IsFull(){
        return Array.length == UsedSize;
    }//检查顺序表是否满了

    private void grow(){
            Array = Arrays.copyOf(Array,2 * Array.length);
    }//进行扩容操作

    private void CheckPos(int pos,String message){
        if (pos < 0 || pos >= UsedSize){
            throw new PosIllegality(message);
        }
    }//检查pos是否在合适的范围内

    public void CheckPosadd(int pos ,String message){
        if (pos < 0 || pos > UsedSize){
            throw new PosIllegality(message);
        }
    }//在新增元素时检查pos是否合法

    private Boolean IsEmpty(String message){
        if (UsedSize == 0){
            throw new EmptyException(message);
        }
        return false;
    }//检查顺序表是否为空

    @Override
    public void add(int pos, int data) {
        CheckPosadd(pos,"pos位置不合法");
        if (IsFull()){
            grow();
        }
        if (pos == UsedSize){
            Array[UsedSize] = data;
            UsedSize++;
            return;
        }
        for (int i = UsedSize; i >= pos ; i--) {
            Array[i] = Array[i - 1];
        }
        Array[pos] = data;
        UsedSize++;
        return;
    }//在pos位置新增元素

    @Override
    public boolean contains(int toFind) {
        for (int i = 0; i < UsedSize; i++) {
            if (toFind == Array[i]){
                return true;
            }
        }
        return false;
    }//判定是否包含某个元素

    @Override
    public int indexOf(int toFind) {
        for (int i = 0; i < UsedSize; i++) {
            if (toFind == Array[i]){
                return i;
            }
            }
        return -1;
    }//查找某个元素对应的位置

    @Override
    public int get(int pos) {
            IsEmpty("顺序表为空");
            CheckPos(pos,"pos的位置不合法");
            return Array[pos];

    }//获取pos位置的元素

    @Override
    public void set(int pos, int value) {
        IsEmpty("顺序表为空");
        CheckPos(pos,"pos位置不合法");
        Array[pos] = value;
    }

    @Override
    public void remove(int toRemove) {
        IsEmpty("顺序表为空");

        if (contains(toRemove)){
            int tem = indexOf(toRemove);
            for (int i = tem; i < UsedSize-1; i++) {
                Array[i] = Array[i + 1];
            }
            UsedSize--;
        }else {
            System.out.println("不存在要找的数字");
        }
    }

    @Override
    public int size() {
        return UsedSize;
    }

    @Override
    public void clear() {
        UsedSize = 0;
    }

    @Override
    public void display() {
        for (int i = 0; i < UsedSize; i++) {
            System.out.print(Array[i]+" ");
        }
    }
}
